/**
 * 人脸识别配置
 */
export const faceRecognitionConfig = {
  // API配置
  api: {
    baseUrl: '/api/face-tracking',
    endpoints: {
      detectFaces: '/detect-faces',
      detectPersons: '/detect-persons',
      recognizeFace: '/recognize-face',
      addFaceSample: '/add-face-sample',
      trainModel: '/train-model',
      getRegisteredFaces: '/registered-faces',
      deleteFace: '/delete-face',
      getStatus: '/status',
      toggleService: '/toggle-service',
      startDetection: '/start-detection',
      stopDetection: '/stop-detection',
      getDetectionStats: '/detection-stats'
    }
  },

  // 检测配置
  detection: {
    // 人脸检测配置
    face: {
      scaleFactor: 1.1,
      minNeighbors: 3,
      minSize: 30,
      maxSize: 300
    },
    // 行人检测配置
    person: {
      scaleFactor: 1.1,
      minNeighbors: 5,
      minSize: 40,
      maxSize: 400
    }
  },

  // 识别配置
  recognition: {
    // 识别阈值
    threshold: 70,
    // 最大样本数
    maxSamples: 100,
    // 重训练间隔（小时）
    retrainInterval: 24,
    // 日志保留天数
    logRetentionDays: 30
  },

  // 界面配置
  ui: {
    // 状态更新间隔（毫秒）
    statusUpdateInterval: 5000,
    // 检测数据更新间隔（毫秒）
    detectionUpdateInterval: 2000,
    // 最近识别记录数量
    maxRecentRecognitions: 10,
    // 动画配置
    animations: {
      pulseDuration: 2000,
      fadeInDuration: 300,
      slideInDuration: 200
    }
  },

  // 文件配置
  files: {
    // 支持的文件格式
    supportedFormats: ['jpg', 'jpeg', 'png', 'bmp'],
    // 最大文件大小（MB）
    maxFileSize: 10,
    // 图像质量设置
    imageQuality: {
      width: 640,
      height: 480,
      quality: 0.8
    }
  },

  // 错误配置
  errors: {
    // 重试次数
    maxRetries: 3,
    // 重试间隔（毫秒）
    retryInterval: 1000,
    // 超时时间（毫秒）
    timeout: 30000
  },

  // 开发配置
  development: {
    // 是否启用调试模式
    debug: false,
    // 是否显示详细日志
    verbose: false,
    // 模拟数据配置
    mockData: {
      enabled: false,
      detectionInterval: 1000,
      recognitionInterval: 3000
    }
  }
}

/**
 * 获取API完整URL
 * @param {string} endpoint - 端点名称
 * @returns {string} 完整的API URL
 */
export const getApiUrl = (endpoint) => {
  const baseUrl = faceRecognitionConfig.api.baseUrl
  const endpointPath = faceRecognitionConfig.api.endpoints[endpoint]
  
  if (!endpointPath) {
    throw new Error(`未找到端点: ${endpoint}`)
  }
  
  return `${baseUrl}${endpointPath}`
}

/**
 * 获取配置值
 * @param {string} path - 配置路径，如 'detection.face.scaleFactor'
 * @returns {any} 配置值
 */
export const getConfig = (path) => {
  const keys = path.split('.')
  let value = faceRecognitionConfig
  
  for (const key of keys) {
    if (value && typeof value === 'object' && key in value) {
      value = value[key]
    } else {
      return undefined
    }
  }
  
  return value
}

/**
 * 设置配置值
 * @param {string} path - 配置路径
 * @param {any} value - 配置值
 */
export const setConfig = (path, value) => {
  const keys = path.split('.')
  const lastKey = keys.pop()
  let target = faceRecognitionConfig
  
  for (const key of keys) {
    if (!target[key] || typeof target[key] !== 'object') {
      target[key] = {}
    }
    target = target[key]
  }
  
  target[lastKey] = value
}

/**
 * 验证配置
 * @returns {Object} 验证结果
 */
export const validateConfig = () => {
  const errors = []
  
  // 验证API配置
  if (!faceRecognitionConfig.api.baseUrl) {
    errors.push('API基础URL未配置')
  }
  
  // 验证检测配置
  if (faceRecognitionConfig.detection.face.scaleFactor <= 0) {
    errors.push('人脸检测缩放因子必须大于0')
  }
  
  if (faceRecognitionConfig.detection.face.minNeighbors < 0) {
    errors.push('人脸检测最小邻居数不能为负数')
  }
  
  // 验证识别配置
  if (faceRecognitionConfig.recognition.threshold < 0 || faceRecognitionConfig.recognition.threshold > 100) {
    errors.push('识别阈值必须在0-100之间')
  }
  
  return {
    valid: errors.length === 0,
    errors
  }
}

export default faceRecognitionConfig
